package com.itheima.d2_map;

import java.util.*;

/**
 * 需求：
 * 某个班级80名学生，现在需要组织秋游活动，班长提供了四个景点依次是（A、B、C、D）,
 * 每个学生只能选择一个景点，请统计出最终哪个景点想去的人数最多。
 */
public class Demo6 {
    public static void main(String[] args) {
        //1.生成80个学生选择的结果：使用一个长度为80的数组，随机存储4种景点字符串
        //1.1 动态初始化一个长度为80的字符串数组
        String[] selectArr = new String[80];
        //1.2 提供4个景点
        String[] areaArr = {"黄鹤楼", "江汉路", "玫瑰街", "石牌岭"};
        //1.3 随机功能使用Random
        Random r = new Random();
        //1.4 遍历selectArr数组
        for (int i = 0; i < selectArr.length; i++) {
            //通过Random，从areaArr数组中随机获取一个景点数据
            int index = r.nextInt(4);
            String area = areaArr[index];

            //将获取到的景点名称给selectArr数组的i索引位置赋值
            selectArr[i] = area;
        }

        //System.out.println(Arrays.toString(selectArr));

        //2.使用Map集合存储景点和其对应的次数，需要遍历长度为80的数组，进行统计
        //2.1 创建一个Map集合，使用HashMap
        Map<String, Integer> map = new HashMap<>();

        //2.2 遍历长度为80的数组，拿出每一个景点名称
        for (int i = 0; i < selectArr.length; i++) {
            String name = selectArr[i];

            //2.3 判断map集合中是否包含遍历出来的景点名称（此时景点名称在map集合中是key）
            if (map.containsKey(name)) {
                //条件成立，说明map集合中已经存储了name景点，对应的次数假设是x次。这一次遍历出来，就是x + 1次
                Integer count = map.get(name);
                //设置新的键值对，键不能重复，新的值会替换旧的值！
                map.put(name, count + 1);
            } else {
                //条件不成立，说明name这个景点是第一次发现
                map.put(name, 1);
            }
        }

        System.out.println(map);

        //3.遍历Map集合，找出次数最多的景点名称，进行打印
        //3.1 拿出map集合中所有的次数（次数在map集合中是value）
        Collection<Integer> values = map.values();

        //3.2 找出values单列集合中的最大值（最大的次数！）
        int max = 0;
        for (Integer count : values) {
            if (count > max) {
                max = count;
            }
        }

        //System.out.println(max);

        //3.3 遍历map集合
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();

            if (max == value) {
                System.out.println("选择次数最多的景点是：" + key);
            }
        }
    }
}
